﻿/*
SINACOR - BMF&Bovespa
Arquivo: ITabelaCorretagem.cs
Criado em: 20-out-2009 11:31:13
Arquiteto Responsável: RAMelo.7Comm
*/
using System;
using System.ServiceModel;
using System.Collections.Generic;
using Sinacor.Infra.Common.Exceptions;
using Sinacor.Infra.Service.ExceptionHandling;
using Sinacor.Infra.Service.Security.Services;
using Sinacor.Infra.Common;
using Sinacor.Infra.Common.Exceptions.FaultContracts;

namespace Sinacor.Servico.Bovespa.Corretagem.Service.ServiceContract
{
    /// <summary>
    /// <b>Descrição do serviço:</b> Disponibiliza recursos para manutenção e consulta
    /// das tabelas de corretagem.
    /// </summary>
    [ExceptionShielding]
    [ServiceContract(Namespace = "http://www.bovespa.com.br/Sinacor.Servico.Bovespa.Corretagem.Service.ServiceContract", SessionMode = SessionMode.Allowed, Name = "ITabelaCorretagem")]
    public interface ITabelaCorretagem
    {
        #region AlterarTabelaCorretagem

        /// <summary>
        /// Altera os dados de uma determinada tabela de corretagem, assim como os seus
        /// descontos diferenciados e faixas de aplicação
        /// </summary>
        /// <param name="request">Parâmetro para alterar os dados de uma determinada tabela de corretagem</param>
        [OperationLog]
        [TransactionRequired]
        [FaultContract(typeof(BusinessFault))]
        [FaultContract(typeof(ValidationFault))]
        [FaultContract(typeof(GeneralFault))]
        [FaultContract(typeof(InvalidSessionFault))]
        [FaultContract(typeof(LicensingFault))]
        [FaultContract(typeof(AccessIsDeniedFault))]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, Action = "AlterarTabelaCorretagem")]
        void AlterarTabelaCorretagem(DataContract.Request.TabelaCorretagemRequest request);

        #endregion

        #region ConsultarTabelasCorretagem

        /// <summary>
        /// Realiza a consulta de tabelas de corretagem conforme filtro
        /// 
        /// Neste método são carregados apenas os dados referentes as tabelas de
        /// corretagens encontradas, portanto não são carregados os dados de descontos ou
        /// faixas
        /// </summary>
        /// <param name="request">Parâmetro para realizar a consulta de tabelas de corretagem</param>
        /// <returns>Lista de TabelaCorretagem</returns>
        [OperationLog]
        [FaultContract(typeof(BusinessFault))]
        [FaultContract(typeof(ValidationFault))]
        [FaultContract(typeof(GeneralFault))]
        [FaultContract(typeof(InvalidSessionFault))]
        [FaultContract(typeof(LicensingFault))]
        [FaultContract(typeof(AccessIsDeniedFault))]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, Action = "ConsultarTabelasCorretagem")]
        List<DataContract.Response.TabelaCorretagemResponse> ConsultarTabelasCorretagem(DataContract.Request.FiltroTabelaCorretagemRequest request);

        #endregion

        #region DuplicarTabelaCorretagem

        /// <summary>
        /// Irá criar uma nova tabela de corretagem, com os mesmos dados da tabela passada
        /// como parâmetro de entrada.
        /// </summary>
        /// <param name="request">Parâmetro que irá criar uma nova tabela de corretagem</param>
        /// <returns>Tabela de Corretagem</returns>
        [OperationLog]
        [TransactionRequired]
        [FaultContract(typeof(BusinessFault))]
        [FaultContract(typeof(ValidationFault))]
        [FaultContract(typeof(GeneralFault))]
        [FaultContract(typeof(InvalidSessionFault))]
        [FaultContract(typeof(LicensingFault))]
        [FaultContract(typeof(AccessIsDeniedFault))]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, Action = "DuplicarTabelaCorretagem")]
        DataContract.Response.TabelaCorretagemResponse DuplicarTabelaCorretagem(DataContract.Request.FiltroTabelaCorretagemChaveRequest request);

        #endregion

        #region ExcluirTabelaCorretagem

        /// <summary>
        /// Exclui uma tabela de corretagem assim como seus descontos diferenciados e as
        /// faixas de aplicação.
        /// </summary>
        /// <param name="request">Parâmetro para excluir uma tabela de corretagem</param>
        [OperationLog]
        [TransactionRequired]
        [FaultContract(typeof(BusinessFault))]
        [FaultContract(typeof(ValidationFault))]
        [FaultContract(typeof(GeneralFault))]
        [FaultContract(typeof(InvalidSessionFault))]
        [FaultContract(typeof(LicensingFault))]
        [FaultContract(typeof(AccessIsDeniedFault))]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, Action = "ExcluirTabelaCorretagem")]
        void ExcluirTabelaCorretagem(DataContract.Request.FiltroTabelaCorretagemChaveRequest request);

        #endregion

        #region IncluirTabelaCorretagem

        /// <summary>
        /// Incluir uma tabela de corretagem e seus descontos diferenciados e faixas de
        /// aplicação.
        /// </summary>
        /// <param name="request">Parâmetro para incluir uma tabela de corretagem</param>
        [OperationLog]
        [TransactionRequired]
        [FaultContract(typeof(BusinessFault))]
        [FaultContract(typeof(ValidationFault))]
        [FaultContract(typeof(GeneralFault))]
        [FaultContract(typeof(InvalidSessionFault))]
        [FaultContract(typeof(LicensingFault))]
        [FaultContract(typeof(AccessIsDeniedFault))]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, Action = "IncluirTabelaCorretagem")]
        void IncluirTabelaCorretagem(DataContract.Request.TabelaCorretagemRequest request);

        #endregion

        #region ObterTabelaCorretagem

        /// <summary>
        /// Obtem uma tabela de corretagem pela chave
        /// 
        /// Neste método são corregados todos os dados referente a tabela de corretagem em
        /// questão (Descontos e Faixas)
        /// </summary>
        /// <param name="request">Parâmetro para obter uma tabela de corretagem</param>
        /// <returns>Tabela de Corretagem</returns>
        [OperationLog]
        [FaultContract(typeof(BusinessFault))]
        [FaultContract(typeof(ValidationFault))]
        [FaultContract(typeof(GeneralFault))]
        [FaultContract(typeof(InvalidSessionFault))]
        [FaultContract(typeof(LicensingFault))]
        [FaultContract(typeof(AccessIsDeniedFault))]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, Action = "ObterTabelaCorretagem")]
        DataContract.Response.TabelaCorretagemResponse ObterTabelaCorretagem(DataContract.Request.FiltroTabelaCorretagemChaveRequest request);

        #endregion
    }
}